﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Anke.SHManage.MSSQLDAL
{
    public class EventPrintDAL
    {
        //受理打印
        public DataTable GetPrintAcceptEventInfoByCode(string code)   //去除民族，是否需要担架
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(@"
SELECT 
    事件编码=TAC.事件编码,受理序号=TAC.受理序号,受理类型编码,TZET.名称 as 受理类型
    ,受理类型子编码,责任受理人编码,TP.姓名 as 责任受理人,责任受理人工号=tp.工号
    ,呼救电话=TAC.呼救电话
    ,TAC.电话振铃时刻,TAC.开始受理时刻,TAC.结束受理时刻,发送指令时刻
    ,现场地址,等车地址,送往地点,往救地点类型编码,送往地点类型编码
    ,联系人,联系电话,分机,患者姓名,性别
    ,年龄,国籍,主诉,病种判断,TAC.病情编码,患者人数,特殊要求
    ,TAC.是否标注,TAC.X坐标,TAC.Y坐标,备注=TAC.备注,病情=tzis.名称 
    ,往救地点类型=tzlat.名称,送往地点类型=tzsat.名称,派车列表
FROM TAcceptEvent TAC
left join TZAcceptEventType TZET on TZET.编码 = TAC.受理类型编码
left join TPerson TP on TP.编码 = TAC.责任受理人编码
left join TZIllState tzis on tzis.编码 = TAC.病情编码
left join TZLocalAddrType tzlat on tzlat.编码 = TAC.往救地点类型编码
left join TZSendAddrType tzsat on tzsat.编码 = TAC.送往地点类型编码
where TAC.事件编码 = '" + code + @"'  order by TAC.受理序号  ");
            DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.AttemperConnectionString, CommandType.Text, sb.ToString(), null);
            return ds.Tables[0];
        }
        //事件打印
        public DataTable GetPrintAlarmEventInfoByCode(string EventCode)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(@"
SELECT 事件编码,首次呼救电话,首次受理时刻,事件名称,
    首次调度员编码,受理次数,区域,执行任务总数,当前执行任务数,
    是否挂起,挂起时刻,预约时刻,首次派车时刻,
    TZET.名称 as 事件类型,TZEO.名称 as 事件来源 
    ,TZAT.名称 as 事故类型,TZAL.名称 as 事故等级,TP.姓名 as 首次调度员, 
	首次调度员工号=tp.工号,TAE.是否测试 
    ,TAE.中心编码,中心名称=tc.名称 
FROM TAlarmEvent TAE 
left join TZAlarmEventType TZET on TZET.编码 = TAE.事件类型编码
left join TZAlarmEventOrigin TZEO on TZEO.编码 =TAE.事件来源编码
left join TZAccidentType TZAT on TZAT.编码 = TAE.事故类型编码
left join TZAccidentLevel TZAL on TZAL.编码 =TAE.事故等级编码
left join TPerson TP on TP.编码=TAE.首次调度员编码
left join TCenter tc on tc.编码=TAE.中心编码
where tae.事件编码 = '" + EventCode + @"'");
            DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.AttemperConnectionString, CommandType.Text, sb.ToString(), null);
            return ds.Tables[0];
        }

        //电话信息打印
        public DataTable GetPrintAlarmCalls(string eventCode)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(@"
select                         
    ac.通话时刻,ac.结束时刻,ac.台号,d.显示名称,ac.调度员编码, p.姓名,p.工号
     ,ct.名称,ac.事件编码,ac.主叫号码,ac.录音号,ac.是否呼出    
from TAlarmCall ac 
left join TZAcceptEventType ct on ac.通话类型编码 = ct.编码 
left join TPerson p on p.编码 = ac.调度员编码 
left join TDesk d on ac.台号= d.台号
where ac.事件编码='" + eventCode + @"' ");
            DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.AttemperConnectionString, CommandType.Text, sb.ToString(), null);
            return ds.Tables[0];
        }

        //任务打印
        public DataTable GetPrintTaskAmbulance(string eventCode)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(@"
select 
    操作来源编码, 
    姓名=isnull(姓名,''),
    车辆状态编码, 
    时刻值
into #temp 
from TAmbulanceStateTime ttime 
left join dbo.TPerson tp on ttime.操作员编码=tp.编码 
left join  TTask tk  on tk.任务编码 = ttime.任务编码 
where tk.事件编码 = '" + eventCode + @"'

select tt.任务编码,事件编码,受理序号,tt.任务流水号,tt.用户流水号  
    ,责任调度人编码,p.姓名 as 责任调度人姓名
	,tt.分站编码,ts.名称 as 分站名称,tt.车辆编码 
	,生成任务时刻,行驶公里数,急救公里数,是否正常结束,isnull(tztr.名称,'')  as 异常结束原因 
    ,tt.司机,tt.医生,tt.护士,tt.担架工,tt.抢救员,是否站内出动,实际救治人数,实际送往地点,备注
	,tt.中心编码,中心名称=tc.名称 
	,tab.车辆类型编码,tzat.名称 as 车辆类型名称,  tab.车牌号码,tab.实际标识,tab.随车电话,tab.车辆编码 			   
    ,接收命令时刻 =	Convert(varchar(19),tt.接收命令时刻,21)+'('+(select top 1 操作来源=case 操作来源编码 when 2 then '车载' else '台:'+ t.姓名 end from #temp t where t.时刻值=tt.接收命令时刻 and t.车辆状态编码=1)+')'
    ,出车时刻 = Convert(varchar(19),tt.出车时刻,21)+'('+(select top 1 操作来源=case 操作来源编码 when 2 then '车载' else '台:'+ t.姓名 end from #temp t where t.时刻值=tt.出车时刻 and t.车辆状态编码=2)+')' 
    ,到达现场时刻 = Convert(varchar(19),tt.到达现场时刻,21)+'('+(select top 1 操作来源=case 操作来源编码 when 2 then '车载' else '台:'+ t.姓名 end from #temp t where t.时刻值=tt.到达现场时刻 and t.车辆状态编码=3)+')' 
    ,离开现场时刻 = Convert(varchar(19),tt.离开现场时刻,21)+'('+(select top 1 操作来源=case 操作来源编码 when 2 then '车载' else '台:'+ t.姓名 end from #temp t where t.时刻值=tt.离开现场时刻 and t.车辆状态编码=4)+')'
    ,到达医院时刻 = Convert(varchar(19),tt.到达医院时刻,21)+'('+(select top 1 操作来源=case 操作来源编码 when 2 then '车载' else '台:'+ t.姓名 end from #temp t where t.时刻值=tt.到达医院时刻 and t.车辆状态编码=5)+')'
    ,完成时刻 = Convert(varchar(19),tt.完成时刻,21)+'('+(select top 1 操作来源=case 操作来源编码 when 2 then '车载' else '台:'+ t.姓名 end from #temp t where t.时刻值=tt.完成时刻 and t.车辆状态编码=6)+')'
    ,返回站中时刻 = Convert(varchar(19),tt.返回站中时刻,21)+'('+(select top 1 操作来源=case 操作来源编码 when 2 then '车载' else '台:'+ t.姓名 end from #temp t where t.时刻值=tt.返回站中时刻 and t.车辆状态编码=7)+')' 
from TTask  tt
left join TAmbulance  tab on tt.车辆编码 = tab.车辆编码  
left join TZAmbulanceType tzat on tzat.编码 = tab.车辆类型编码
left join TStation ts on ts.编码 = tt.分站编码
left join TCenter tc on tc.编码 = tt.中心编码
left join TPerson p on p.编码  = tt.责任调度人编码
left join  TZTaskAbendReason tztr on tt.异常结束原因编码 = tztr.编码
where tt.事件编码='" + eventCode + @"'  
drop table #temp");
            DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.AttemperConnectionString, CommandType.Text, sb.ToString(), null);
            return ds.Tables[0];
        }
        //绿色通道
         public DataTable GetPrintGreenDate(string taskCode)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(@"
                 select 患者姓名,拟诊,送往医院,联系电话,预报人,登录人,时间,tgd.备注
                    from TGreenDate tgd 
			    	inner join TTask tt on tgd.任务编码 = tt.任务编码
                    where tt.事件编码='" + taskCode + @"' ");
            DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.AttemperConnectionString, CommandType.Text, sb.ToString(), null);
            return ds.Tables[0];
        }



    }
}
